/**
  ******************************************************************
  * @file    main.c
  * @author  xy	
  * @version V1.0
  * @date    2020-9-29
  * @brief   外部中断
  ******************************************************************
  * @attention
  * verimake 用于ch549例程
  * 按下key1按键可以对小灯状态取反
  ******************************************************************
  */
#include <CH549_sdcc.H>	 //ch549的头文件，其中定义了单片机的一些特殊功能寄存器


#define led  P2_2     //将单片机的P2.2端口定义为led
#define key1 P3_2     //将单片机的P3.2端口定义为key1

/********************************************************************
* 函 数 名       : delay
* 函数功能		   : 延时函数
* 输    入       : 时间
* 输    出    	 : 无
********************************************************************/
void delay(long int i)
{
	while(i--);	
}

/********************************************************************
* TIPS:
* ch549外部中断包括外部中断0(P3.2)和外部中断1(P3.3)
* 初始化一个外部中断需要三步
* 第一步：设置跳变沿触发方式 例：IT0=0 选择外部中断0为低电平触发；IT0=1 选择外部中断0为下降边沿触发（IT1同理）
* 第二步：打开外部中断0或外部中断1的中断允许 例：EX0=1 打开INT0的中断允许；EX0=0 关闭INT0的中断允许（IT1同理）
* 第三步：打开总中断 例：EA=1 打开总中断；EA=0,关闭总中断
*********************************************************************/

/********************************************************************
* 函 数 名         : Int0Init()
* 函数功能		     : 设置外部中断0
* 输    入         : 无
* 输    出         : 无
*********************************************************************/
void Int0Init()
{
	//设置INT0
	IT0=1;  //跳变沿触发方式（下降沿）
	EX0=1;  //打开INT0的中断允许。	
	EA=1;   //打开总中断	
}

/********************************************************************
* 函 数 名         : Int1Init()
* 函数功能		     : 设置外部中断1
* 输    入         : 无
* 输    出         : 无
*********************************************************************/
//void Int1Init()
//{
//	//设置INT1
//	IT1=1;  //跳变沿触发方式（下降沿）
//	EX1=1;  //打开INT1的中断允许。	
//	EA=1;   //打开总中断	
//}

/*******************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
********************************************************************/
void main()
{ 
	 Int0Init();  //对外部中断0（P3.2）初始化
   while(1);    //死循环
}

/*******************************************************************
* 函 数 名         : Int0()	__interrupt 0
* 函数功能		     : 外部中断0的中断函数
* 输    入         : 无
* 输    出         : 无
* TIPS：1.Int0 可以修改成任意函数名
*       2.举例：外部中断1 void Int1()	__interrupt 2	
*       3.外部中断0       中断号0
*         定时器0中断     中断号1
*         外部中断1       中断号2
*         定时器1中断     中断号3
*******************************************************************/
void Int0()	__interrupt 0		//外部中断0的中断函数
{	
	delay(120000);	 //延时消抖
  IE0=0;
	if(key1==0)
	{
		led=!led;    //LED状态取反
	}
}